package com.yjh.pojo.vo;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
public class R<T> {

    private Integer code; //编码：1成功，0和其它数字为失败

    private String msg; //错误信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

    // 私有构造方法，防止直接创建对象
    private R() {}

    // 成功时的静态方法
    public static <T> R<T> success(T object) {
        R<T> r = new R<>();
        r.data = object;
        r.code = 1;
        r.msg = "操作成功"; // 默认成功消息
        return r;
    }

    // 重载成功方法，不带数据
    public static <T> R<T> success() {
        return success(null);
    }

    // 错误时的静态方法
    public static <T> R<T> error(String msg) {
        R<T> r = new R<>();
        r.msg = msg;
        r.code = 0;
        return r;
    }

    // 重载错误方法，可指定错误码
    public static <T> R<T> error(int code, String msg) {
        R<T> r = new R<>();
        r.msg = msg;
        r.code = code;
        return r;
    }

    // 添加动态数据
    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}
